package de.syfy.project.engine.utils;

/**
 * Vektor Klasse für 2D-Räume.
 * 
 * @author Timo
 */
public class Vector2D {
    private float x,y;
    
    public Vector2D(){}
    
    public Vector2D(float x, float y){
        this.x = x;
        this.y = y;
    }
    
    /**
     * Setzt X des Vektors.
     * @param x 
     */
    public void setX(float x){
        this.x = x;
    }
    /**
     * Setzt Y des Vektors.
     * @param y 
     */
    public void setY(float y){
        this.y = y;
    }
    
    public float getX(){
        return this.x;
    }
    
    public float getY(){
        return this.y;
    }
    /**
     * Gibt die Länge des Vektors zurück.
     * 
     * @return 
     */
    public float magnitude(){
        return (float) Math.sqrt(x*x+y*y);
    }
    
    /**
     * Addiert zwei Vektoren miteinander und gibt ein neues Vector2D-Object 
     * zurück.
     * 
     * @param v
     * @return 
     */
    public Vector2D add(Vector2D v){
        return new Vector2D(v.getX()+this.x,v.getY()+this.y);
    }
    
    /**
     * Subtrahiert zwei Vektoren voneinander und gibt ein neues Vector2D-Object 
     * zurück.
     * 
     * @param v
     * @return 
     */
    public Vector2D sub(Vector2D v){
        return new Vector2D(this.x - v.getX(),this.y - v.getY());
    }
    
    /**
     * Multipliziert zwei Vektoren miteinander und gibt ein neues Vector2D-Object 
     * zurück.
     * 
     * @param v
     * @return 
     */
    public Vector2D mult(float f){
        return new Vector2D(this.x * f,this.y*f);
    }
    
    /**
     * Berechnet das Skalarprodukt und gibt dieses als float zurück.
     * 
     * @param v
     * @return 
     */
    public float scalar(Vector2D v){
        return v.getX()*this.x+v.getY()+this.y;
    }
    
    /**
     * Berechnet den Winkel zwischen zwei Vektoren.
     * 
     * @param v
     * @return 
     */
    public float angleBetween(Vector2D v){
        return (float) Math.cos((double)((this.scalar(v))/(this.magnitude()*v.magnitude())));
    }
    
}
